package com.Lemon.Zhkuhealth.admin.controller;

import com.Lemon.Zhkuhealh.api.service.IMemberService;
import com.Lemon.Zhkuhealth.common.constant.MessageConstant;
import com.Lemon.Zhkuhealth.common.pojo.entity.Member;
import com.Lemon.Zhkuhealth.common.util.PageResult;
import com.Lemon.Zhkuhealth.common.util.QueryPageBean;
import com.Lemon.Zhkuhealth.common.util.R;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.*;

/**
 * 会员管理 Controller
 */
@Slf4j // 使用 Lombok 生成日志对象
@RestController
@RequestMapping("/member") // 对应前端的 /member 路由
@RequiredArgsConstructor
public class MemberController {

    @DubboReference // 引用 Dubbo 服务
    private IMemberService memberService;

    /**
     * 分页查询会员列表
     * URL: /member/findPage
     * @param queryPageBean 查询条件 (包含 currentPage, pageSize, queryString)
     * @return 统一响应结果 (PageResult)
     */
    @PostMapping("/findPage")
    public R findPage(@RequestBody QueryPageBean queryPageBean) {
        try {
            PageResult<Member> pageResult = memberService.findPage(queryPageBean);
            log.info("查询会员列表成功，总记录数: {}", pageResult.getTotal());
            return new R(true, MessageConstant.QUERY_MEMBER_SUCCESS, pageResult);
        } catch (Exception e) {
            log.error("查询会员列表失败: {}", e.getMessage(), e);
            return new R(false, MessageConstant.QUERY_MEMBER_FAIL);
        }
    }

    /**
     * 新增会员
     * URL: /member/add
     * @param member 会员实体
     * @return 统一响应结果
     */
    @PostMapping("/add")
    public R add(@RequestBody Member member) {
        try {
            memberService.add(member);
            log.info("新增会员成功: {}", member);
            return new R(true, MessageConstant.ADD_MEMBER_SUCCESS);
        } catch (Exception e) {
            log.error("新增会员失败: {}", e.getMessage(), e);
            // 考虑更细致的异常处理，例如处理手机号/身份证号重复
            if (e.getMessage() != null && e.getMessage().contains("Duplicate entry")) {
                return new R(false, "新增会员失败，手机号或身份证号可能重复！");
            }
            return new R(false, MessageConstant.ADD_MEMBER_FAIL);
        }
    }

    /**
     * 根据ID查询会员信息（用于编辑回显）
     * URL: /member/findById?id=...
     * @param id 会员ID
     * @return 统一响应结果 (Member)
     */
    @GetMapping("/findById")
    public R findById(@RequestParam("id") Integer id) {
        try {
            Member member = memberService.findById(id);
            if (member != null) {
                log.info("根据ID查询会员成功，ID: {}", id);
                return new R(true, MessageConstant.QUERY_MEMBER_SUCCESS, member);
            } else {
                log.warn("根据ID查询会员失败，ID: {} 不存在", id);
                return new R(false, MessageConstant.QUERY_MEMBER_FAIL);
            }
        } catch (Exception e) {
            log.error("根据ID查询会员失败: {}", e.getMessage(), e);
            return new R(false, MessageConstant.QUERY_MEMBER_FAIL);
        }
    }

    /**
     * 根据ID查询会员档案信息 (与findById功能重复，但为了匹配前端方法名保留)
     * URL: /member/getMemberById?id=...
     * @param id 会员ID
     * @return 统一响应结果 (Member)
     */
    @GetMapping("/getMemberById")
    public R getMemberById(@RequestParam("id") Integer id) {
        try {
            Member member = memberService.getMemberById(id);
            if (member != null) {
                log.info("根据ID查询会员档案信息成功，ID: {}", id);
                return new R(true, MessageConstant.QUERY_MEMBER_SUCCESS, member);
            } else {
                log.warn("根据ID查询会员档案信息失败，ID: {} 不存在", id);
                return new R(false, MessageConstant.QUERY_MEMBER_FAIL);
            }
        } catch (Exception e) {
            log.error("根据ID查询会员档案信息失败: {}", e.getMessage(), e);
            return new R(false, MessageConstant.QUERY_MEMBER_FAIL);
        }
    }


    /**
     * 更新会员信息
     * URL: /member/edit
     * @param member 会员实体
     * @return 统一响应结果
     */
    @PostMapping("/edit")
    public R edit(@RequestBody Member member) {
        try {
            memberService.edit(member);
            log.info("更新会员成功: {}", member);
            return new R(true, MessageConstant.EDIT_MEMBER_SUCCESS);
        } catch (Exception e) {
            log.error("更新会员失败: {}", e.getMessage(), e);
             if (e.getMessage() != null && e.getMessage().contains("Duplicate entry")) {
                return new R(false, "更新会员失败，手机号或身份证号可能重复！");
            }
            return new R(false, MessageConstant.EDIT_MEMBER_FAIL);
        }
    }

    /**
     * 根据ID删除会员
     * URL: /member/delete?id=...
     * @param id 会员ID
     * @return 统一响应结果
     */
    @DeleteMapping("/delete") // 使用 @DeleteMapping 更符合 RESTful 风格
    public R delete(@RequestParam("id") Integer id) {
        try {
            memberService.deleteById(id);
            log.info("删除会员成功，ID: {}", id);
            return new R(true, MessageConstant.DELETE_MEMBER_SUCCESS);
        } catch (Exception e) {
            log.error("删除会员失败: {}", e.getMessage(), e);
            // 考虑是否存在关联数据无法删除的情况
            return new R(false, MessageConstant.DELETE_MEMBER_FAIL);
        }
    }

    /**
     * 根据手机号查询会员 (用于会员注册时的手机号校验)
     * URL: /member/findByPhoneNumber?phoneNumber=...
     * @param phoneNumber 手机号
     * @return 统一响应结果 (Member)
     */
    @GetMapping("/findByPhoneNumber")
    public R findByPhoneNumber(@RequestParam("phoneNumber") String phoneNumber) {
        try {
            Member member = memberService.findByPhoneNumber(phoneNumber);
            if (member != null) {
                log.info("根据手机号查询会员成功，手机号: {}", phoneNumber);
                return new R(true, MessageConstant.QUERY_MEMBER_SUCCESS, member);
            } else {
                log.info("根据手机号查询会员，手机号: {} 不存在", phoneNumber);
                return new R(false, "该手机号未注册会员！"); // 可以自定义消息
            }
        } catch (Exception e) {
            log.error("根据手机号查询会员失败: {}", e.getMessage(), e);
            return new R(false, MessageConstant.QUERY_MEMBER_FAIL);
        }
    }
}